# 题目
# 小 O 有一个长度为 n 的由小写字母组成的字符串 s，小 O 想知道 s 中有多少个非空且字符集本质不同。
# 子串：为从原字符串中，连续的选择一段字符（可以全选、不可以不选）得到新字符串。
# 字符集：注意，本题中 “字符集” 的定义需要考虑每个字符出现的次数。如果两个子串包含的各字符数量均相同，则认为它们的字符集相同。
# 字符串 abc 的字符集为 {a,b,c}，字符串 aba 和字符串 baa 的字符集均为 {a,a,b}。
import sys
def solve():
    n = int(sys.stdin.readline())
    s = sys.stdin.readline().strip()
    distinct_char_sets = set()
    # 遍历所有可能的子串起始位置 i
    for i in range(n):
        # 对于每个新的起始位置 i，重新初始化字符频率计数器
        # char_counts[0] 存储 'a' 的数量, char_counts[1] 存储 'b' 的数量, 以此类推
        char_counts = [0] * 26
        # 遍历所有可能的子串结束位置 j，从 i 开始
        for j in range(i, n):
            # 获取当前字符 s[j] 的 ASCII 值并计算其在 char_counts 中的索引
            char_index = ord(s[j]) - ord('a')
            # 增加当前字符的计数
            char_counts[char_index] += 1
            # 将当前的字符频率列表转换为元组，并添加到集合中
            # 元组是不可变的，因此可以作为集合的元素进行哈希和去重
            distinct_char_sets.add(tuple(char_counts))
    # 最终的答案是集合中元素的数量
    print(len(distinct_char_sets))
# 调用解决函数
solve()
# 输入
# 3
# abc
# 输出
# 6
# 输入
# 5
# aazzd
# 输出
# 13


